#ifndef LZ77_H_
#define LZ77_H_

#include <stdio.h>
#include "../common.h"
#include "../bit.h"

typedef int int32_t;		//si je ne le redéfinis pas ici, ne compile pas sous windows...

#define LZ77ID	"lz77"


//en-tête de fichier pour LZ77
typedef struct {
	char id[4];		//identifiant d'un fichier compressé avec lz77
	uint dicLen;		//taille du dictionnaire
	uint readbuflen;	//longueur du buffer a utiliser pour décompresser
	size_t uncompressedSize;  //taille du fichier original non compressé
} lz77_header_t;



//Initialisation du module lz77
extern void	LZ77_init(uint dictionaryLen, uint readBufLen);
extern bitbuf_t * LZ77_createEncodeBuffer(size_t len);
extern bitbuf_t * LZ77_createDecodeBuffer(size_t len);
extern void LZ77_encode(bitbuf_t * dst, bitbuf_t * src);
extern void LZ77_decode(bitbuf_t * dst, bitbuf_t * src);
extern void LZ77_compress(FILE * out, FILE * in);
extern void LZ77_decompress(FILE * out, FILE * in);

#endif /* LZ77_H_ */
